//pages/match/match.js
const common = require("../../../utils/zstz.js");
//获取应用实例
const app = getApp().globalData;
let error = false;

Page({
  /**
   * 页面的初始数据
   */
  data: {
    headImg: common.avatar,
    matchType: '',
    qCataId: '',
    cataname: '',
    fromGlobal: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var pages = getCurrentPages();
    //判断来源页面，用于匹配失败时跳转
    var prevPage = pages[pages.length - 2].route;
    var fromGlobal = prevPage.indexOf("/category") > 0;
    console.log((fromGlobal ? '全能挑战' : '轮播图') + '打开match')
    let that = this;
    let openId = wx.getStorageSync('openid');
    console.log(openId)
    this.setData({
      matchType: options.matchType,
      qCataId: options.qCataId,
      cataname: options.cataname,
      headImg: wx.getStorageSync('userInfo').avatarUrl,
      fromGlobal: fromGlobal
    })
    let wsUrl = common.wsUrl + 'waitting/' + openId;
    //连接上链接
    that.connect(wsUrl);
    //监听连接成功
    wx.onSocketOpen(function (res) {
      console.log('链接成功')
      if(options.matchType == "global"){ //全网对战
        that.send("startGame", options.matchType, options.qCataId); //进入游戏
      }else{ //单位对战
        that.send("startGame", options.matchType, app.fid, options.qCataId); //进入游戏
      }
    })
    //监听服务器向前端发送数据
    wx.onSocketMessage(function (res) {
      var result = JSON.parse(res.data);
      if (result.success && result.data) {
        //成功了 直接跳转匹配成功页,将pk双方的信息传过去
        let parameter = result.data.wxNickName + '&avatar=' + result.data.wxAvatar + '&matchType=' + options.matchType + '&qCataId=' + options.qCataId + '&cataname=' + options.cataname;
        that.cancel();
        wx.redirectTo({
          url: '../matchSuccess/matchSuccess?name=' + parameter,
        })
      } else {
        //失败  返回上一页  从新点击按钮
        wx.showModal({
          title: '匹配失败',
          content: '暂无人对战，是否继续匹配？',
          success(res) {
            if (res.confirm) {
              console.log('用户点击确定')
              that.cancel(); //关闭长连接
              wx.redirectTo({
                url: '../match/match?matchType=' + options.matchType + '&qCataId=' + options.qCataId + '&cataname=' + options.cataname
              })
            } else if (res.cancel) {
              console.log('用户点击取消')
              that.cancel(); //关闭长连接
              if (that.data.fromGlobal) {
                wx.redirectTo({
                  url: '../category/category?qCataId=' + options.qCataId
                })
              } else {
                wx.redirectTo({
                  url: '../activityCate/activityCate?type=unit&qCataId=' + options.qCataId + '&cataname=' + options.cataname
                })
              }
            }
          }
        })
      }
    });
    //监听链接关闭
    wx.onSocketClose(function (res) {
      //说明是意外断网，导致连接关闭，跳转网络异常页面
      if (error) {
        console.log('网络异常关闭链接' + error);
        wx.redirectTo({
          url: '../error/error',
        })
      } else {
        error = false;
        console.log('手动关闭链接' + error);
      }
    });
  },

  //取消匹配
  cancel() {
    //关闭长连接
    wx.closeSocket(function (res) {
      error = true;
      console.log('手动关闭链接' + error)
    });
  },

  //打开连接
  connect(url) {
    wx.connectSocket({
      url: url,
      data: {},
      method: 'get',
      header: {
        'content-type': 'application/json'
      },
      success: function (res) {},
      fail: function () {},
    });
  },

  //发送数据函数
  send(cmd, matchType, studyFid, qCataId) {
    let data = {
      token: wx.getStorageSync('token'),
      cmd: cmd,
      matchType: matchType,
      qCataId: qCataId,
      studyFid: studyFid
    };
    wx.sendSocketMessage({
      data: JSON.stringify(data),
      success: (res) => {
        console.log('发送消息成功->' + cmd)
      },
      fail: () => {},
    })
    //监听链接打开成功，然后可以做前端向服务器发送信息
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    //监听左上角返回按钮事件
    this.cancel();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }

})